اصول پنج گانه SOLID در برنامه نویسی چیست ؟
لطفا بفرمایید
- اصول پنج گانه SOLID در برنامه نویسی چیست ؟
- این اصول در چه زبان هایی مورد استفاده قرار می گیره ؟
- در صورت رعایت کردن این اصول چه مزایایی خواهیم داشت ؟ و اگر رعایت نشه چه مشکلاتی پیش میاد؟
پاسخ هوش مصنوعی
اصول پنج گانه SOLID مجموعه ای از اصول طراحی نرم افزار است که به بهبود ساختار و قابلیت نگهداری کد کمک می کند. این اصول شامل موارد زیر است:
- S - Single Responsibility Principle (SRP): یک کلاس باید تنها یک مسیولیت داشته باشد و تمام وظایف آن در رابطه با همان مسیولیت باشند.
- O - Open/Closed Principle (OCP): کلاس ها باید برای توسعه باز و برای اصلاح بسته باشند. این بدان معنی است که شما باید بتوانید با افزودن کد جدید ویژگی ها را اضافه کنید، بدون اینکه کد قدیمی را تغییر دهید.
- L - Liskov Substitution Principle (LSP): اشیاء از یک کلاس باید قابل جایگزینی با اشیاء از کلاس های زیرمجموعه باشند بدون اینکه رفتار برنامه تغییر کند.
- I - Interface Segregation Principle (ISP): بهتر است چندین رابط خاص ایجاد شود به جای یک رابط عمومی و بزرگ. این کمک می کند تا کلاس ها فقط آن متدهایی را که نیاز دارند پیاده سازی کنند.
- D - Dependency Inversion Principle (DIP): ماژول های سطح بالای نباید به ماژول های سطح پایین وابسته باشند. هر دو باید به انتزاع ها وابسته باشند (به عنوان مثال، رابط ها). همچنین، انتزاع ها نباید به جزییات وابسته باشند، بلکه جزییات باید به انتزاع ها وابسته باشند.
این اصول می توانند در بسیاری از زبان های برنامه نویسی مانند Java, C#, Python, C++, و Ruby استفاده شوند.
با رعایت این اصول، مزایای زیر حاصل می شود:
- افزایش قابلیت نگهداری کد
- کاهش پیچیدگی و افزایش خوانایی کد
- افزایش قابلیت تست و قابلیت اطمینان نرم افزار
- کاهش ریسک خطاها و بروز اشکالات در کد
اگر این اصول رعایت نشوند، ممکن است مشکلاتی از قبیل:
- افزایش وابستگی ها و پیچیدگی در کد
- کاهش قابلیت اصلاح و توسعه نرم افزار
- به سختی اضافه کردن ویژگی های جدید
- کاهش کیفیت نهایی نرم افزار و ایجاد خطاهای بیشتر

SOLID چیست ؟
اول ببینیم SOLID چی هست و چه کاری در نهایت قرار برامون انجام بده. SOLID به 5 اصل در طراحی شی گرا در نرم افزار گفته میشه که آقای رابرت سیسیل مارتین معرفی کرده. هدف از معرفی اصول SOLID اینه که برنامه نویس برای توسعه نرم افزار و یا نگهداری از برنامه و اشکال زدایی یا debug کار ساده تری داشته باشه.
نکته : دقت کنید استفاده از معماری ها و اصول پذیرفته شده در برنامه نویسی معمولا در پروژه های بزرگ ضروری به نظر میرسد. در پروژه های با اندازه کوچک به دلیل پیچیدگی های کمتر و وابستگی های کمتر در بخش های مختلف نرم افزار احساس نیاز به اصول و معماری ها دیده نمی شود.
SOLID مخفف چه کلماتی می باشد ؟
هر حرف از کلمه S.O.L.I.D مخفف یک عبارت و نشان دهنده یک اصل از اصول 5 گانه می باشد.
- S مخفف عبارت Single-responsiblity Principl می باشد. این اصل به ما می گوید هر کلاس در نرم افزار فقط و فقط باید یک وظیفه مشخص انجام دهد. در واقع یک کلاس نباید بیش از یک Job داشته باشد. (دقت کنید این اصل از اصول برنامه نویسی تمیز یا Clean Architecture هم می باشد.)
- O مخفف عبارت Open-closed Principle می باشد. این اصل به ما میگوید یک کلاس در نرم افزار باید برای گسترش باز شود ولی برای اصلاح بسته بماند. این یعنی یک کلاس باید بدون تغییر در خود کلاس قابل گسترش باشد.
مثال : برای درک بهتر این اصل فرض کنید 10 شکل دارید. مربع، مثلث، 5 ضلعی، 6 ضلعی و .... حالا می خواهید کلاسی بنویسید که مساحت یا محیط هر شکل را محاسبه کند. خب در این کلاس مطمئنا باید از If و else های زیادی استفاده کنید تا مشخص شود شکل شما چند ضلعی می باشد تا مساحت آن محاسبه شود. این اصل می گوید بهتر است این کلاس به کلاس های مختلفی بشنکد و مساحت یا محیط هر شکل در یک کلاس واحد محاسبه شود. در اینجا تعداد کلاس های شما افزایش پیدا می کند اما هر کلاس ساده تر و قابل فهم تر می شود.
- L مخفف عبارت Liskov Substitution Principle می باشد. این اصل مشخص می کنه که کلاس های فرزند در نرم افزار نباید باعث تغییر در کلاس پدر خود شوند. در واقع همیشه فرزندان از پدر خود به ارث میبرند نه بالعکس.
- I مخفف عبارت Interface Segregation Principle می باشد. این اصل (که به نظر خودم برای بهبود عملکرد نرم افزار لازمه) به ما میگه که یک کلاینت (کلاینت میتونه برنامه نویس باشه هنگام توسعه نرم افزارش یا حتی کاربر نهایی هنگام استفاده از نرم افزار یا حتی لایه Presentation برای استفاده از کلاس ها و اینترفیس های لایه های پایین تر) نباید از اینترفیس هایی استفاده کنه دارای متدها و توابعی باشه که هرگز در اون فضا بهش نیاز نداره. به عبارت ساده تر میشه گفت باید اینترفیس های بزرگ رو به اینترفیس های کوچکتر تبدیل کرد که وظیفه یا مجموعه وظایف خاصی رو دارن.
- D مخفف عبارت Dependency Inversion Principle می باشد. این اصل هم تقریبا همون مفهوم تزریق وابستگی یا Dependency Injection رو میرسونه. اگر بخوام یک مثال واضح تر بزنم میگه توابع و متدها باید مستقل از دیتابیس کار کنن. (این مفهوم هم در برنامه نویسی با معماری DDD یا Domain Driven Design معرفی شده.)
اصول SOLID در چه زبانهایی قابل پیاده سازی می باشد؟
تقریبا در همه زبان های برنامه نویسی رایج میشه از اصول SOLID استفاده کرد. در اینجا لازم میدونم چند نکته رو در رابطه با اصول SOLID بهتون بگم :
- استفاده از اصول SOLID یا هر معماری دیگه ای مثل معماری تمیز اجباری نیست. این ها همه پیشنهاد هست. در واقع این اصول پیشنهادهایی برای افزایش بهره وری و ساده کردن کار برنامه نویس هست. ممکنه در برخی پروژه ها استفاده از این اصول مناسب باشه و در برخی پروژه ها هم مناسب نباشه.
- استفاده از این اصول گرچه باعث ساده تر شدن کار میشه اما گاهی پیاده سازی چنین اصولی پیچیدگی های زیادی به همراه خواهد داشت و عملا استفاده نکردن از این اصول میتونه بهینه تر باشه.
- خیلی از این اصول استباطی هست. یعنی ممکنه نحوه پیاده سازی شما با برنامه نویس دیگری متفاوت باشه. در واقع دو استنباط مختلف از یک کار واحد داشته باشید.
- زبان های برنامه نویسی مختلف روش های مختلفی رو برای کارهای مختلف ارائه میدن. ممکنه مثلا پیاده سازی این اصول در PHP با ASP متفاوت باشه. در واقع قرار نیست همه زبان ها و همه برنامه نویسان یک سورس دقیقا یکسان برای یک پروژه داشته باشن.
منبع : SOLID: The First 5 Principles of Object Oriented Design
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- بهترین سایتها برای تمرین آنلاین برنامه نویسی چیست ؟
- نگهداری و نمایش تاریخچه ویرایش متن در Word
- فرق بین Senior Developer و Junior Developer چیست ؟
- Agile چیست ؟ مدیریت پروژه با روش Agile در برنامه نویسی چگونه است ؟
- فرق زبان های برنامه نویسی سطح بالا و سطح پایین چیست ؟
- معرفی آموزش برای Power BI و Data Warehouse
- چت GBT چیست ؟ نمونه مشابه ChatGBT وجود داره ؟
- آیا یادگیری سی شارپ به طور حرفه ای آینده شغلی خوبی داره ؟